package com.koron.operation.classes.schedule.bean.po;

import com.koron.bean.base.BaseBean;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.util.StringUtils;

import java.util.Date;

/**
 * 排班方案(ClassesSchedule)表实体类
 *
 * @author jzp
 * @since 2021-10-20
 */
@EqualsAndHashCode(callSuper = true)
@Data
@ApiModel(value = "排班方案", description = "ClassesSchedule")
public class ClassesSchedule extends BaseBean {

    /**
     * 排班方案名称
     */
    @ApiModelProperty("排班方案名称")
    private String name;

    /**
     * 班别方案id
     */
    @ApiModelProperty("班别方案id")
    private String classesId;

    /**
     * 班别方案名称
     */
    @ApiModelProperty("班别方案名称")
    private String classesName;

    /**
     * 值班人员类型，数据字典：operation_staff_type
     */
    @ApiModelProperty("值班人员类型，数据字典：operation_staff_type")
    private String staffType;

    /**
     * 值班单位id
     */
    @ApiModelProperty("值班单位id")
    private String deptId;

    /**
     * 值班单位名称
     */
    @ApiModelProperty("值班单位名称")
    private String deptName;

    /**
     * 值班地点id
     */
    @ApiModelProperty("值班地点id")
    private String locationId;

    /**
     * 值班地点名称
     */
    @ApiModelProperty("值班地点名称")
    private String locationName;

    /**
     * 排班开始时间
     */
    @ApiModelProperty("排班开始时间")
    private Date startTime;

    /**
     * 排班结束时间
     */
    @ApiModelProperty("排班结束时间")
    private Date endTime;

    @ApiModelProperty("是否自动交接班，0 false")
    private Integer autoSwitch;

    /**
     * 提交交班时间
     */
    @ApiModelProperty("提交交班时间")
    private Double advanceShiftTime;

    /**
     * 提前交班单位
     */
    @ApiModelProperty("提前交班单位")
    private String advanceShiftUnit;

    /**
     * 默认0停用，1启用
     */
    @ApiModelProperty("默认0启用，1停用")
    private Integer status;

    @ApiModelProperty("运行状态，只在分页页面使用，如果查询条件中有health字段，则查询结果中也会有这个字段；否则没有。带上该条件会影响性能")
    private Integer health;

    /**
     *
     * @return 提前交班时间，单位：毫秒
     */
    public Long computeAdvanceTime() {
        if (advanceShiftTime == null || StringUtils.isEmpty(advanceShiftUnit)) return null;
        long v = (long) (advanceShiftTime * 60 * 1000L);
        // 0分钟, 1小时
        return "0".equals(advanceShiftUnit) ? v : v * 60;
    }

}
